/*
 * Nombre: ReticulaAcademica.java
 * Version: 1.0.0
 * Diagrama: GAPI v2.3.1
 * Autor: Amado de Jesús Canté Cauich
 * Creado: 12-feb-2013
 * Modificado:
 * Caso de uso: MGPE1, MGPE2, MGPE3
 */
package Dominio;

import java.util.ArrayList;

/**
 * Clase que representa una retícula académica
 * @author amado.cante
 */
public class ReticulaAcademica {
    private int claveReticulaAcademica;
    private String nombre;    
    private ArrayList<Semestre> listaDeSemestres;
    private ArrayList<AsignaturaOptativa> asignaturasOptativas;

    /**
     * Método constructor
     * @param claveReticulaAcademica - La clave de la retícula académica
     * @param nombre - El nombre de la retícula académica
     * @param listaDeSemestres - La lista de semestres de la retícula académica
     * @param asignaturasOptativas - Las asignaturas optavias de la retícula académica
     */
    public ReticulaAcademica(int claveReticulaAcademica, String nombre, ArrayList<Semestre> listaDeSemestres, ArrayList<AsignaturaOptativa> asignaturasOptativas) {
        this.claveReticulaAcademica = claveReticulaAcademica;
        this.nombre = nombre;
        this.listaDeSemestres = listaDeSemestres;
        this.asignaturasOptativas = asignaturasOptativas;
    }

    /**
     * Método constructor
     * @param nombre - EL nombre de la retícula académica
     * @param listaDeSemestres - La lista de semestres de la retícula académica
     * @param asignaturasOptativas - Las asignaturas optativas de la retícula académica
     */
    public ReticulaAcademica(String nombre, ArrayList<Semestre> listaDeSemestres, ArrayList<AsignaturaOptativa> asignaturasOptativas) {
        this.nombre = nombre;
        this.listaDeSemestres = listaDeSemestres;
        this.asignaturasOptativas = asignaturasOptativas;
    }

    /**
     * Método constructor
     * @param nombre - El nombre de la retícula académica
     * @param listaDeSemestres - La lista de semestres de la retícula académica
     */
    public ReticulaAcademica(String nombre, ArrayList<Semestre> listaDeSemestres) {
        this.nombre = nombre;
        this.listaDeSemestres = listaDeSemestres;
    }

    /**
     * Método constructor
     * @param nombre - El nombre de la retícula académica
     */
    public ReticulaAcademica(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Retorna la clave de la retícula académica
     * @return la clave de la retícula académica
     */
    public int getClaveReticulaAcademica() {
        return claveReticulaAcademica;
    }

    /**
     * Asigna la clave de la retícula académica
     * @param claveReticulaAcademica - La clave de la retícula académica
     */
    public void setClaveReticulaAcademica(int claveReticulaAcademica) {
        this.claveReticulaAcademica = claveReticulaAcademica;
    }

    /**
     * Retorna el nombre de la retícula académica
     * @return el nombre de la retícula académica
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Asigna el nombre de la retícula académica
     * @param nombre - El nombre de la retícula académica
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Retonra la lista de semestres de la retícula académica
     * @return la lista de semestres de la retícula académica
     */
    public ArrayList<Semestre> getListaDeSemestres() {
        return listaDeSemestres;
    }

    /**
     * Asigna la lista de semestres de la retícula académica
     * @param listaDeSemestres - La lista de semestres de la retícula académica
     */
    public void setListaDeSemestres(ArrayList<Semestre> listaDeSemestres) {
        this.listaDeSemestres = listaDeSemestres;
    }

    /**
     * Retona las asignaturas optativas de la retícula académica
     * @return las asigntuaras optativas de la retícula académica
     */
    public ArrayList<AsignaturaOptativa> getAsignaturasOptativas() {
        return asignaturasOptativas;
    }

    /**
     * Asigna las asignaturas optaivas de la retícula académica
     * @param asignaturasOptativas - Las asignatuas optatvias de la retícula académica
     */
    public void setAsignaturasOptativas(ArrayList<AsignaturaOptativa> asignaturasOptativas) {
        this.asignaturasOptativas = asignaturasOptativas;
    }

    /**
     * Reotna el número de semestres de la retícula académica
     * @return el número de semestres de la retícula académica
     */
    public int getNumeroDeSemestres(){
        return this.listaDeSemestres.size();
    }
    
    /**
     * Retonr al información de la retícula académica
     * @return la información de la retícula académica
     */
    @Override
    public String toString(){
        return this.nombre+"\n"+this.listaDeSemestres.toString()+"\nOptativas: \n"+this.asignaturasOptativas.toString();
    }
}
